package edu.mju.security.utils;

import io.jsonwebtoken.CompressionCodecs;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * token操作工具类
 */
@Component
public class TokenUtils {
    /**
     * token有效时长
     */
    private final long tokenLiveTime = 24*60*60*1000;

    /**
     * 编码密钥
     */
    private String tokenMyKey = "19971022";

    /**
     * 使用JWT 根据用户名生成token
     * @param username 传入的用户名
     * @return token
     */
    public String createToken(String username){
        return Jwts.builder()
                //主体对象
                .setSubject(username)
                //有效时长
                .setExpiration(new Date(System.currentTimeMillis()+ tokenLiveTime))
                //密钥编码与加密
                .signWith(SignatureAlgorithm.HS512,tokenMyKey).compressWith(CompressionCodecs.GZIP).compact();
    }

    /**
     * 使用JWT 根据token字符串得到用户信息
     * @param token 用户token
     * @return 用户名
     */
    public String getTokenInfo(String token){
        return Jwts.parser()
                //设置密钥
                .setSigningKey(tokenMyKey)
                //传入token
                .parseClaimsJws(token)
                //取出token中数据
                .getBody().getSubject();
    }

    /**
     * 移除token
     */
    public void removeToken(String token){
        //无需操作，时间到token自动移除
        Log logger =  LogFactory.getLog(getClass());
        logger.info("-------token已移除------");
    }
}
